package com.analysis.dto;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * 腾讯云智能体开发平台对话端接口请求DTO
 * 基于腾讯云文档：https://cloud.tencent.com/document/product/1759/105561
 */
public class TencentChatRequest {
    
    /**
     * 请求ID，用于标识一个请求（作消息串联，建议每个请求使用不同的request_id）
     * 为了便于问题排查，建议必填
     */
    @JsonProperty("request_id")
    private String requestId;
    
    /**
     * 消息内容，如果发送图片，在此传递markdown格式的图片链接
     * 例如![](图片链接)，其中图片链接需要可公有读
     */
    private String content;
    
    /**
     * 文件信息，如果填写该字段，content字段可以为空
     * 依赖实时文档解析功能
     */
    @JsonProperty("file_infos")
    private List<FileInfo> fileInfos;
    
    /**
     * 会话ID，用于标识一个会话（外部系统提供）
     * 建议不同的用户端会话传入不同的session_id
     * 参数长度：2-64个字符
     * 校验规则：^[a-zA-Z0-9_-]{2,64}$
     */
    @JsonProperty("session_id")
    private String sessionId;
    
    /**
     * 应用密钥
     */
    @JsonProperty("bot_app_key")
    private String botAppKey;
    
    /**
     * 访客ID（外部输入，建议唯一，标识当前接入会话的用户）
     */
    @JsonProperty("visitor_biz_id")
    private String visitorBizId;
    
    /**
     * 流式回复频率控制：控制应用回包频率
     * 该值表示应用每积攒多少字符向调用方回包一次
     * 值越小回包越频繁（体验上越流畅，但流量开销也越大）
     * 当不传值或者为0时以系统配置为准
     * 默认值：5，建议最大值：100
     */
    @JsonProperty("streaming_throttle")
    private Integer streamingThrottle;
    
    /**
     * 是否启用思考过程展示
     * 当为true时，会返回思考过程事件
     */
    @JsonProperty("enable_thought")
    private Boolean enableThought;
    
    /**
     * 是否启用参考来源展示
     * 当为true时，会返回参考来源事件
     */
    @JsonProperty("enable_reference")
    private Boolean enableReference;
    
    /**
     * 是否启用token统计
     * 当为true时，会返回token统计事件
     */
    @JsonProperty("enable_token_statistics")
    private Boolean enableTokenStatistics;
    
    /**
     * 联网搜索控制
     * 空字符串：跟随应用配置
     * enable：打开联网搜索
     * disable：关闭联网搜索
     */
    @JsonProperty("search_network")
    private String searchNetwork;
    
    /**
     * 流式传输控制
     * 空字符串：跟随应用配置
     * enable：开启流式传输
     * disable：关闭流式传输
     */
    private String stream;
    
    /**
     * 文件信息内部类
     */
    public static class FileInfo {
        /**
         * 文件ID
         */
        @JsonProperty("file_id")
        private String fileId;
        
        /**
         * 文件名称
         */
        @JsonProperty("file_name")
        private String fileName;
        
        /**
         * 文件类型
         */
        @JsonProperty("file_type")
        private String fileType;
        
        /**
         * 文件大小（字节）
         */
        @JsonProperty("file_size")
        private Long fileSize;
        
        /**
         * 文件URL
         */
        @JsonProperty("file_url")
        private String fileUrl;
        
        // 构造函数
        public FileInfo() {}
        
        public FileInfo(String fileId, String fileName, String fileType, Long fileSize, String fileUrl) {
            this.fileId = fileId;
            this.fileName = fileName;
            this.fileType = fileType;
            this.fileSize = fileSize;
            this.fileUrl = fileUrl;
        }
        
        // Getters and Setters
        public String getFileId() {
            return fileId;
        }
        
        public void setFileId(String fileId) {
            this.fileId = fileId;
        }
        
        public String getFileName() {
            return fileName;
        }
        
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
        
        public String getFileType() {
            return fileType;
        }
        
        public void setFileType(String fileType) {
            this.fileType = fileType;
        }
        
        public Long getFileSize() {
            return fileSize;
        }
        
        public void setFileSize(Long fileSize) {
            this.fileSize = fileSize;
        }
        
        public String getFileUrl() {
            return fileUrl;
        }
        
        public void setFileUrl(String fileUrl) {
            this.fileUrl = fileUrl;
        }
    }
    
    // 构造函数
    public TencentChatRequest() {}
    
    public TencentChatRequest(String content, String sessionId, String botAppKey, String visitorBizId) {
        this.content = content;
        this.sessionId = sessionId;
        this.botAppKey = botAppKey;
        this.visitorBizId = visitorBizId;
    }
    
    // Getters and Setters
    public String getRequestId() {
        return requestId;
    }
    
    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }
    
    public String getContent() {
        return content;
    }
    
    public void setContent(String content) {
        this.content = content;
    }
    
    public List<FileInfo> getFileInfos() {
        return fileInfos;
    }
    
    public void setFileInfos(List<FileInfo> fileInfos) {
        this.fileInfos = fileInfos;
    }
    
    public String getSessionId() {
        return sessionId;
    }
    
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }
    
    public String getBotAppKey() {
        return botAppKey;
    }
    
    public void setBotAppKey(String botAppKey) {
        this.botAppKey = botAppKey;
    }
    
    public String getVisitorBizId() {
        return visitorBizId;
    }
    
    public void setVisitorBizId(String visitorBizId) {
        this.visitorBizId = visitorBizId;
    }
    
    public Integer getStreamingThrottle() {
        return streamingThrottle;
    }
    
    public void setStreamingThrottle(Integer streamingThrottle) {
        this.streamingThrottle = streamingThrottle;
    }
    
    public Boolean getEnableThought() {
        return enableThought;
    }
    
    public void setEnableThought(Boolean enableThought) {
        this.enableThought = enableThought;
    }
    
    public Boolean getEnableReference() {
        return enableReference;
    }
    
    public void setEnableReference(Boolean enableReference) {
        this.enableReference = enableReference;
    }
    
    public Boolean getEnableTokenStatistics() {
        return enableTokenStatistics;
    }
    
    public void setEnableTokenStatistics(Boolean enableTokenStatistics) {
        this.enableTokenStatistics = enableTokenStatistics;
    }
    
    public String getSearchNetwork() {
        return searchNetwork;
    }
    
    public void setSearchNetwork(String searchNetwork) {
        this.searchNetwork = searchNetwork;
    }
    
    public String getStream() {
        return stream;
    }
    
    public void setStream(String stream) {
        this.stream = stream;
    }
}
